package com.hingsmy.pma.logging;


import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.util.Arrays;
@Aspect
@Component
public class ApplicationLoggerAspect {
    private final Logger log =  LoggerFactory.getLogger(this.getClass());




    @Pointcut("within(com.hingsmy.pma.controllers..*)" +"|| within(com.hingsmy.pma.dao..*)")
    public void  definePackagePointcuts(){

    }
//    @Before("definePackagePointcuts()")
//    public  void  logBefore(JoinPoint joinPoint){
//        log.debug("\n\n\n");
//        log.debug("***************方法执行前***************");
//        log.debug(
//                "{}.{}(),输入参数{}",
//                joinPoint.getSignature().getDeclaringTypeName(),
//               joinPoint.getSignature().getName(),
//                Arrays.toString(joinPoint.getArgs())
//        );
//        log.debug("-----------------------------------------");
//        log.debug("\n\n\n");
//    }
//
//
//    @After("definePackagePointcuts()")
//    public  void  logAfter(JoinPoint joinPoint){
//
//        log.debug("\n\n\n");
//        log.debug("***************方法执行前***************");
//        log.debug(
//              "{}.{}(),输入参数{}",
//               joinPoint.getSignature().getDeclaringTypeName(),
//               joinPoint.getSignature().getName(),
//                Arrays.toString(joinPoint.getArgs()));
//        log.debug("-----------------------------------------");
//        log.debug("\n\n\n");
//    }
    @Around("definePackagePointcuts()")
    public Object logAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        log.debug("\n\n\n");
        log.debug("***************方法执行前***************");
        log.debug(
                "{}.{}(),输入参数{}",
                proceedingJoinPoint.getSignature().getDeclaringTypeName(),
                proceedingJoinPoint.getSignature().getName(),
                Arrays.toString(proceedingJoinPoint.getArgs())
        );
        log.debug("-----------------------------------------");
        log.debug("\n\n\n");


        Object object = proceedingJoinPoint.proceed();

        log.debug("\n\n\n");
        log.debug("***************方法执行后***************");
        log.debug(
                "{}.{}(),输入参数{}",
                proceedingJoinPoint.getSignature().getDeclaringTypeName(),
                proceedingJoinPoint.getSignature().getName(),
                Arrays.toString(proceedingJoinPoint.getArgs())
        );
        log.debug("-----------------------------------------");
        log.debug("\n\n\n");
        return object;

    }

}












